/*******************************************************************************
  * 文件：KeyHandler.c
  * 作者：djy
  * 版本：v1.0.0
  * 日期：2020-07-03
  * 说明：按键处理
*******************************************************************************/

/* 头文件 *********************************************************************/
#include "KeyHandler.h"
#include "KeyDispatch.h"
#include "KeyCheck.h"
// #include "DevInfor.h"
#include "Display.h"
#include "Debug.h"
#include "DevState.h"
#include "DevRun.h"
#include "DevStandby.h"
#include "Buzzer.h"

/* 宏定义 *********************************************************************/
/* 类型定义 *******************************************************************/
/* 变量定义 *******************************************************************/
/* 函数声明 *******************************************************************/
/* 函数定义 *******************************************************************/

/*******************************************************************************
  * 函数名: Key_PowerLongPressHandler
  * 功  能：电源键长按处理函数
  * 参  数：无
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void Key_PowerLongPressHandler(void)
{
    if(eDEV_STANDBY == Dev_GetCurrentState())
    {
        // 待机切换至运行
        Dev_ChangeState(eDEV_RUN);
    }
    else
    {
        // 切换至待机
        Dev_ChangeState(eDEV_STANDBY);
    }
}

/*******************************************************************************
  * 函数名: Key_S1LongPressHandler
  * 功  能：S1键短按处理函数
  * 参  数：无
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void Key_S1LongPressHandler(void)
{
    // 检查童锁是否开启
    if(Dev_GetChildLock() == TRUE)
    {
        return;
    }

    switch(Dev_GetCurrentState())
    {
    case eDEV_RUN:
        DevStandby_ResetIdleCheck();
        DevRum_S1LongPressHandler();
    break;
    default:
    break;
    }
}

/*******************************************************************************
  * 函数名: Key_WarmPressHandler
  * 功  能：Warm键短按处理函数
  * 参  数：无
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void Key_WarmPressHandler(void)
{
    // 检查童锁是否开启
    if(Dev_GetChildLock() == TRUE)
    {
        return;
    }

    switch(Dev_GetCurrentState())
    {
    case eDEV_RUN:
        DevStandby_ResetIdleCheck();
        DevRun_KeepWarmPressHandler();
    break;
    default:
    break;
    }
}

/*******************************************************************************
  * 函数名: Key_BoostPressHandler
  * 功  能：Boost键短按处理函数
  * 参  数：无
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void Key_BoostPressHandler(void)
{
    // 检查童锁是否开启
    if(Dev_GetChildLock() == TRUE)
    {
        return;
    }

    switch(Dev_GetCurrentState())
    {
    case eDEV_RUN:
        DevStandby_ResetIdleCheck();
        DevRun_BoostPressHandler();
    break;
    default:
    break;
    }
}

/*******************************************************************************
  * 函数名: Key_PausePressHandler
  * 功  能：Pause键短按处理函数
  * 参  数：无
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void Key_PausePressHandler(void)
{
    // 检查童锁是否开启
    if(Dev_GetChildLock() == TRUE)
    {
        return;
    }

    switch(Dev_GetCurrentState())
    {
    case eDEV_RUN:
        DevStandby_ResetIdleCheck();
        DevRun_PausePressHandler();
    break;
    default:
    break;
    }
}

/*******************************************************************************
  * 函数名: Key_Hob1PressHandler
  * 功  能：Hob1键短按处理函数
  * 参  数：无
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void Key_Hob1PressHandler(void)
{
    // 检查童锁是否开启
    if(Dev_GetChildLock() == TRUE)
    {
        return;
    }

    switch(Dev_GetCurrentState())
    {
    case eDEV_RUN:
            // 1号炉头按键处理
            DevRun_HobPressHandler(u8CZ1);
            // 重启空闲检测
            DevStandby_ResetIdleCheck();
    break;
    default:
    break;
    }
}

/*******************************************************************************
  * 函数名: Key_Hub2PressHandler
  * 功  能：Hub2键短按处理函数
  * 参  数：无
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void Key_Hob2PressHandler(void)
{
    // 检查童锁是否开启
    if(Dev_GetChildLock() == TRUE)
    {
        return;
    }

    switch(Dev_GetCurrentState())
    {
    case eDEV_RUN:
            // 2号炉头按键处理
            DevRun_HobPressHandler(u8CZ2);
            // 重启空闲检测
            DevStandby_ResetIdleCheck();
    break;
    default:
    break;
    }
}

/*******************************************************************************
  * 函数名: Key_Hub3PressHandler
  * 功  能：Hub3键短按处理函数
  * 参  数：无
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void Key_Hob3PressHandler(void)
{
    // 检查童锁是否开启
    if(Dev_GetChildLock() == TRUE)
    {
        return;
    }

    switch(Dev_GetCurrentState())
    {
    case eDEV_RUN:
            // 3号炉头按键处理
            DevRun_HobPressHandler(u8CZ3);
            // 重启空闲检测
            DevStandby_ResetIdleCheck();
    break;
    default:
    break;
    }
}

/*******************************************************************************
  * 函数名: Key_Hub4PressHandler
  * 功  能：Hub4键短按处理函数
  * 参  数：无
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void Key_Hob4PressHandler(void)
{
    // 检查童锁是否开启
    if(Dev_GetChildLock() == TRUE)
    {
        return;
    }

    switch(Dev_GetCurrentState())
    {
    case eDEV_RUN:
            // 4号炉头按键处理
            DevRun_HobPressHandler(u8CZ4);
            // 重启空闲检测
            DevStandby_ResetIdleCheck();
    break;
    default:
    break;
    }
}

/*******************************************************************************
  * 函数名: Key_Hob1LongPressHandler
  * 功  能：Hob1键长按处理函数
  * 参  数：无
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void Key_Hob1LongPressHandler(void)
{
    // 检查童锁是否开启
    if(Dev_GetChildLock() == TRUE)
    {
        return;
    }

    switch(Dev_GetCurrentState())
    {
    case eDEV_RUN:
            // 1号炉头按键处理
            DevRun_HobLongPressHandler(u8CZ1);
            // 重启空闲检测
            DevStandby_ResetIdleCheck();
    break;
    default:
    break;
    }
}

/*******************************************************************************
  * 函数名: Key_Hob2LongPressHandler
  * 功  能：Hob2键长按处理函数
  * 参  数：无
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void Key_Hob2LongPressHandler(void)
{
    // 检查童锁是否开启
    if(Dev_GetChildLock() == TRUE)
    {
        return;
    }

    switch(Dev_GetCurrentState())
    {
    case eDEV_RUN:
            // 2号炉头按键处理
            DevRun_HobLongPressHandler(u8CZ2);
            // 重启空闲检测
            DevStandby_ResetIdleCheck();
    break;
    default:
    break;
    }
}

/*******************************************************************************
  * 函数名: Key_Hob3LongPressHandler
  * 功  能：Hob3键长按处理函数
  * 参  数：无
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void Key_Hob3LongPressHandler(void)
{
    // 检查童锁是否开启
    if(Dev_GetChildLock() == TRUE)
    {
        return;
    }

    switch(Dev_GetCurrentState())
    {
    case eDEV_RUN:
            // 3号炉头按键处理
            DevRun_HobLongPressHandler(u8CZ3);
            // 重启空闲检测
            DevStandby_ResetIdleCheck();
    break;
    default:
    break;
    }
}

/*******************************************************************************
  * 函数名: Key_Hob4LongPressHandler
  * 功  能：Hob4键长按处理函数
  * 参  数：无
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void Key_Hob4LongPressHandler(void)
{
    // 检查童锁是否开启
    if(Dev_GetChildLock() == TRUE)
    {
        return;
    }

    switch(Dev_GetCurrentState())
    {
    case eDEV_RUN:
            // 4号炉头按键处理
            DevRun_HobLongPressHandler(u8CZ4);
            // 重启空闲检测
            DevStandby_ResetIdleCheck();
    break;
    default:
    break;
    }
}



/*******************************************************************************
  * 函数名: Key_AddPressHandler
  * 功  能：Add键短按处理函数
  * 参  数：无
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void Key_AddPressHandler(void)
{
    // 检查童锁是否开启
    if(Dev_GetChildLock() == TRUE)
    {
        return;
    }

    // 调试使用
    switch(Dev_GetCurrentState())
    {
    case eDEV_RUN:
        DevRun_AddPressHandler(ON);
        // 重置空闲检测
        DevStandby_ResetIdleCheck();
    break;
    default:
    break;
    }
}

/*******************************************************************************
  * 函数名: Key_SubPressHandler
  * 功  能：Sub键短按处理函数
  * 参  数：无
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void Key_SubPressHandler(void)
{
    // 检查童锁是否开启
    if(Dev_GetChildLock() == TRUE)
    {
        return;
    }

    // 调试使用
    switch(Dev_GetCurrentState())
    {
    case eDEV_RUN:
        DevRun_SubPressHandler(ON);
        // 重置空闲检测
        DevStandby_ResetIdleCheck();
    break;
    default:
    break;
    }
}

/*******************************************************************************
  * 函数名: Key_AddContinuePressHandler
  * 功  能：Add键连按处理函数
  * 参  数：无
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void Key_AddContinuePressHandler(void)
{
    // 检查童锁是否开启
    if(Dev_GetChildLock() == TRUE)
    {
        return;
    }

    // 调试使用
    switch(Dev_GetCurrentState())
    {
    case eDEV_RUN:
        DevRun_AddPressHandler(OFF);
        // 重置空闲检测
        DevStandby_ResetIdleCheck();
    break;
    default:
    break;
    }
}

/*******************************************************************************
  * 函数名: Key_SubContinuePressHandler
  * 功  能：Sub键连按处理函数
  * 参  数：无
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void Key_SubContinuePressHandler(void)
{
    // 检查童锁是否开启
    if(Dev_GetChildLock() == TRUE)
    {
        return;
    }

    // 调试使用
    switch(Dev_GetCurrentState())
    {
    case eDEV_RUN:
        DevRun_SubPressHandler(OFF);
        // 重置空闲检测
        DevStandby_ResetIdleCheck();
    break;
    default:
    break;
    }
}

/*******************************************************************************
  * 函数名: Key_LockShortPressHandler
  * 功  能：ADD和Sub键短按处理函数，打开童锁
  * 参  数：无
  * 返回值：无
  * 说  明：在上电后，无论是在运行、空闲、待机状态下，都可以设置童锁
*******************************************************************************/
void Key_LockShortPressHandler(void)
{
    // 确认童锁是否已开启
    if(Dev_GetChildLock() == FALSE)
    {
        // 设置童锁标志位
        Dev_SetChildLock(TRUE);

        // 蜂鸣器响
        Buzzer_Play(eBUZZER_SOUND_LOCK,eBUZZER_VOL_HIGH);
      
        // 显示童锁
        Display_ShowLock();

        // 待机状态下，开启童锁，童锁Lo显示一分钟后自动关闭
        if(eDEV_STANDBY == Dev_GetCurrentState())
        {
            // 处理童锁显示 - 待机状态下
            DevStandby_RestartTimer();
        }
    }
}

/*******************************************************************************
  * 函数名: Key_LockLongPressHandler
  * 功  能：ADD和Sub键长按处理函数，解除童锁
  * 参  数：无
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void Key_LockLongPressHandler(void)
{
    // 如果童锁已经启动，进行关闭
    if(Dev_GetChildLock() == TRUE)
    {
        // 设置童锁标志位
        Dev_SetChildLock(FALSE);

        // 解锁音
        Buzzer_Play(eBUZZER_SOUND_UNLOCK,eBUZZER_VOL_HIGH);
    }
}

/*******************************************************************************
  * 函数名: Key_SliderHandler
  * 功  能：滑条回调函数
  * 参  数：无
  * 返回值：无
  * 说  明：按键短按时，先检测是否为滑条中的按键
*******************************************************************************/
void Key_SliderHandler(U8 u8Slider)
{
    // 检查童锁是否开启
    if(Dev_GetChildLock() == TRUE)
    {
        return;
    }

    switch(Dev_GetCurrentState())
    {
    case eDEV_RUN:
            // 滑条处理
            DevRun_SliderHandler(u8Slider);
            // 重置空闲检测
            DevStandby_ResetIdleCheck();
    break;
    default:
    break;
    }
}

/***************************** 文件结束 ***************************************/
